---
title: Inbox
summary: Screen where bill-entry staff work a personal inbox of bills and open a bill for entry.
status: draft
owner: Claims
last_reviewed: 2026-09-30
---

# Inbox

The Inbox screen lists the bills assigned to a responsible party, which defaults to the signed-in user. The user can look at another mail id, sort and filter the grid, save or clear personal grid preferences, and double-click a bill to open it on the [Bill entry](entry.md) screen. The Bill entry screen returns the user here after a bill is submitted, discarded, or sent or pended, unless its Auto feed checkbox is checked, in which case it stays on Bill entry and loads the next queued bill.

## Route

| Controller | Action | Verb | URL | Parameters | View | Layout |
| --- | --- | --- | --- | --- | --- | --- |
| `InboxController` | `Index` | GET | `/ClaimBillEntry/Inbox/Index` | None | `Views/Inbox/Index.cshtml` | `~/Views/Shared/_Bootstrap3.cshtml` |

## Access

| Requirement | Declared on | Effect |
| --- | --- | --- |
| `[SaifAuthorize(Roles = "CBPEnterBill")]` | `InboxController` | Only users in the `CBPEnterBill` role can open the screen or call `Inbox/GetInboxBills`. |

## Entry conditions
- The user follows a link from the layout top menu or side menu for menu category `CLBLE`; the menu entries themselves are defined outside this repository.**
- The browser navigates here from [Bill entry](entry.md) to `/ClaimBillEntry/Inbox/Index` after a bill is submitted, discarded, or sent or pended while Auto feed is unchecked; with Auto feed checked the screen loads the next queue bill instead of coming here.
- The user opens the URL directly.

The action sets `ResponsiblePartyId` from Session `MailId`, or the upper-cased current user id when no value is stored, and loads the "Inbox" grid preferences.

## Fields

| Field | Binds to | Control | Purpose | Validation |
| --- | --- | --- | --- | --- |
| Assigned to | `InboxViewModel.ResponsiblePartyId` | Text box | Mail id whose inbox is shown; sent as grid read data | `maxlength` 8; client-side. `InboxFilterValidator` declares "Assigned to is required." but no action binds it, so it is inactive. |
| Inbox grid | `InboxBillViewModel` rows | Kendo Grid (client-side operations) | Bills for the responsible party | None |
| Save preferences and Clear preferences | `InboxViewModel.Preferences` | Links | Save or clear the user's grid column preferences | None |

## Operations

| Operation | Trigger | Request | Description | Delegates to |
| --- | --- | --- | --- | --- |
| Load inbox bills | Grid read, with data from `inbox.onInboxRetrieve` | `GET Inbox/GetInboxBills` | Replaces a blank or `SYSTEM` mail id with the current user, stores it in Session `MailId`, resolves the owner name and loads the bills for that responsible party. | [Open a bill from the inbox](../application/operations/open-bill-from-inbox.md) |
| Save grid preferences | Save preferences link | `POST Inbox/SavePreferences` | Stores the user's grid column layout for "InboxGrid". | [Open a bill from the inbox](../application/operations/open-bill-from-inbox.md) |
| Clear grid preferences | Clear preferences link | `POST Inbox/ClearPreferences` | Removes the stored grid column layout for "InboxGrid". | [Open a bill from the inbox](../application/operations/open-bill-from-inbox.md) |
| Open bill | Row double-click | — | Client-side only; navigates to the Bill entry screen when the bill status allows it. | [Open a bill from the inbox](../application/operations/open-bill-from-inbox.md) |

The load operation calls `GetApplicationUser` on the user profile service and `GetInboxBillsByResponsiblePartyId` on the bill entry service; the linked workflow page documents those calls, and the internal steps of the package services were not traced. The preference operations call the user profile service through `BaseController`. See [dependencies](../application/dependencies.md).

## Dialogs and partials

| Name | Opens as | Returned by | Purpose |
| --- | --- | --- | --- |
| `_InboxGrid` | Inline `Html.Partial` | Rendered by `Views/Inbox/Index.cshtml` | Kendo Grid `InboxGrid` with client-side paging, sorting and filtering; `change` and `dataBound` events wire selection and preferences. |

The form on the view posts to `Index` on the Inbox controller, but no POST action exists, so the form is a client-side container only.*

## AJAX and grid actions

| Request | Kind | Called by | Returns |
| --- | --- | --- | --- |
| [`GET Inbox/GetInboxBills`](../application/hosted-endpoints.md#inbox.getinboxbills) | Grid read | `InboxGrid` transport | DataSourceResult with a security-filtered flag |
| [`POST Inbox/SavePreferences`](../application/hosted-endpoints.md#basecontroller.savepreferences) | AJAX call with no returned result | Save preferences link, intercepted by `claimbillentry.js`, which posts `pageName`, `columnSort`, `columnOrder` and `columnWidths` | Empty response; the action is `void` |
| [`POST Inbox/ClearPreferences`](../application/hosted-endpoints.md#basecontroller.clearpreferences) | AJAX call with no returned result | Clear preferences link, intercepted by `claimbillentry.js`, which posts `pageName` and then reloads the page | Empty response; the action is `void` |

## Client-side behavior
- **Script module:** `ClaimBillEntry/js/ClaimBillEntry.inbox.js`, with the shared `ClaimBillEntry/js/claimbillentry.js`.
- `setupPrefs` and `refreshGrid` in the shared script apply the saved column preferences to `InboxGrid`.
- The server actions are `void` methods declared on `BaseController` without an HTTP verb restriction (documented as `ANY`), but the shared script always uses POST to the hard-coded URLs `/ClaimBillEntry/Inbox/SavePreferences` and `/ClaimBillEntry/Inbox/ClearPreferences`.
- Messages use toastr through `claimbillentry.message.js`.
- When grid selection changes, the shared script sets the layout web-context value to the claim number.

## Business rules

| Rule ID | Rule | Enforcement | Source |
| --- | --- | --- | --- |
| [BR-SCR-011](../application/business-rules.md#br-scr-011-inbox-owner-defaults-to-current-user) | A blank or `SYSTEM` mail id is replaced with the current user. | Action check | `ClaimBillEntry/Controllers/InboxController.cs:49-78` |
| [BR-SCR-012](../application/business-rules.md#br-scr-012-inbox-warns-on-confidential-claims-and-unknown-users) | The grid warns when confidential claims are filtered out and reports an unknown user id. | Action check and client script | `ClaimBillEntry/Controllers/InboxController.cs:63-64`, `ClaimBillEntry/js/ClaimBillEntry.inbox.js:87-99` |
| [BR-SCR-001](../application/business-rules.md#br-scr-001-bills-must-be-in-an-openable-status) | Only Pending, Entered, Audited or Suspended bills may be opened; otherwise "Only Pending, Entered, Audited, or Suspended Bills may be opened." is shown. | Client script | `ClaimBillEntry/js/ClaimBillEntry.inbox.js:5-6`, `:59-80` |

## Navigation

| Target | Trigger | Parameters |
| --- | --- | --- |
| [Bill entry](entry.md) | Row double-click on an openable bill | Bill id in `/ClaimBillEntry/Entry/Index/{billId}` |

---

> **Note:** Statements marked with `*` were inferred from code structure, naming
> conventions, or contextual evidence where direct confirmation was not available
> in source artifacts. Statements marked with `**` could not be confirmed; treat
> as unknown until verified.

## Sources
- ClaimBillEntry/Controllers/InboxController.cs
- ClaimBillEntry/Controllers/BaseController.cs
- ClaimBillEntry/Views/Inbox/Index.cshtml
- ClaimBillEntry/Views/Inbox/_InboxGrid.cshtml
- ClaimBillEntry/Views/Shared/_Bootstrap3.cshtml
- ClaimBillEntry/ViewModels/Inbox/InboxViewModel.cs
- ClaimBillEntry/ViewModels/Inbox/InboxFilterViewModel.cs
- ClaimBillEntry/Classes/AutoMapperBootStrapper.cs
- ClaimBillEntry/js/ClaimBillEntry.inbox.js
- ClaimBillEntry/js/claimbillentry.js
- ClaimBillEntry/js/claimbillentry.message.js
